package com.ynwt.service;

import com.ynwt.domain.Event;
import com.ynwt.domain.User;
import com.ynwt.enums.UserEventLockType;

/**
 * Created by huangying on 2017/5/1.
 */
public interface EventService {

    /**
     * 判断用户是否关注服务号（系统上线后，和微信有任何活动，则视为成为环球小伙伴）
     * @param openid
     * @return
     */
    boolean isSubscribe(String openid);

    /**
     * 判断用户是否成为环球小伙伴（系统上线后，和微信有任何活动，则视为成为环球小伙伴）
     * @param unionid
     * @return
     */
//    boolean isHuanQiuXiaoHuoBan(String unionid);

    /**
     * 关注事件
     * @param user
     */
    boolean subscribe(User user);

    /**
     * 注册成为环球小伙伴
     * @param openid
     * @return
     */
    void regHuanQiuXiaoHuoBan(String openid);

    /**
     * 保存用户
     * @param user 用户
     * @param event 注册事件
     * @param hasRegister //是否已经注册
     * @return
     */
    boolean saveNewUser(User user, Event event, boolean hasRegister);

    /**
     * 生成二维码（如果已经有了参数二维码，则刷新参数二维码）
     * @param openid
     */
    void createQrcode(String openid);

    /**
     * 刷新二维码（如果没有专属参数二维码，则生成一个新的）
     * @param openid
     */
    void refreshQrcode(String openid);

    /**
     * 判断二维码是否失效（如果还没有参数二维码，也判定为失效）
     * @param openid
     * @return
     */
    boolean isQrcodeLegal(String openid);

    /**
     * 早起签到（不同时间段获得不同逸贝）
     * @param openid
     * @return 回复语
     */
    void sign(String openid);

    /**
     * 签到事务管理（用乐观锁防止重复签到）
     * @param openid
     * @return
     */
    String signTransaction (String openid);

    /**
     * 添加事件锁 （用串行的方式运行，保证只添加一次）
     * @param user
     * @param type
     */
    void addUserEventLock (User user, UserEventLockType type);

    /**
     * 处理扫描参数二维码事件
     * @param openid
     * @param scene 二维码参数
     */
    void handleQrCodeSubscribe(String openid, int scene);

    /**
     * 判断今日是否签到
     * @param openid
     * @return
     */
    boolean hasSignedToday(String openid);

}
